
package dao;

import java.sql.Connection;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;  
import java.util.Vector;  
import javax.swing.JOptionPane;  
import modelo.dominio.Locacao;
import dao.banco.ConFactory;  
  
public class DaoLocacao {  

   private final String URL = "jdbc:mysql://localhost/bd_locarrao",  
   NOME = "root", SENHA = "locarrao2";  
   private Connection con;  
   private Statement comando;  
  
  /* public void apagar(String cpf) {  
      conectar();  
      try {  
         comando.executeUpdate("DELETE FROM pessoa WHERE cpf = '" + cpf  
                     + "';");  
      } catch (SQLException e) {  
         imprimeErro("Erro ao apagar pessoas", e.getMessage());  
      } finally {  
         fechar();  
      }  
   }  
  
   public Vector<Cliente> buscarTodos() {  
      conectar();  
      Vector<Cliente> resultados = new Vector<Cliente>();  
      ResultSet rs;  
      try {  
         rs = comando.executeQuery("SELECT * FROM pessoa");  
         while (rs.next()) {  
            Cliente temp = new Cliente();  
            // pega todos os atributos da pessoa 
            temp.setCpf(rs.getString("cpf"));  
            temp.setNome(rs.getString("nome"));  
            temp.setTelefone(rs.getString("telefone"));
            resultados.add(temp);  
         }  
         return resultados;  
      } catch (SQLException e) {  
         imprimeErro("Erro ao buscar pessoas", e.getMessage());  
         return null;  
      }  
   }  
*/
  
   public void atualizar(Locacao locacao) {  
      conectar();  
      String com = "UPDATE tb_locacao SET valor = '" + locacao.getValor() + "', locacao_fim = '1' WHERE cod_locacao = '" + locacao.getIdLocacao() + "';";
      System.out.println("Atualizada!");
      
      try {  
         comando.executeUpdate(com);  
      } catch (SQLException e) {  
         e.printStackTrace();  
      } finally {  
         fechar();  
      }  
   } 
/*
   public Vector<Cliente> buscar(String cpf) {  
      conectar();  
      Vector<Cliente> resultados = new Vector<Cliente>();  
      ResultSet rs;  
      try {  
         rs = comando.executeQuery("SELECT * FROM pessoa WHERE cpf LIKE '"  
               + cpf + "%';");  
         while (rs.next()) {  
            Cliente temp = new Cliente();  
            // pega todos os atributos da pessoa  
            temp.setCpf(rs.getString("cpf"));  
            temp.setNome(rs.getString("nome"));  
            temp.setTelefone(rs.getString("telefone"));  
            resultados.add(temp);  
         }  
         return resultados;  
      } catch (SQLException e) {  
         imprimeErro("Erro ao buscar pessoa", e.getMessage());  
         return null;  
      }  
  
   }  */
   

   public Locacao buscarLocacaoPorCod(int cod) {  
      conectar();  
      Locacao temp = new Locacao();  
      ResultSet rs;  
      try {  
         rs = comando.executeQuery("SELECT * FROM tb_locacao WHERE cod_locacao LIKE '"  
               + cod + "%';");
         while (rs.next()) {  
            temp.setIdLocacao(rs.getInt("cod_locacao"));
            temp.setTipoLocacao(rs.getString("tipo_locacao"));
            temp.setCodVeiculo(rs.getInt("cod_veiculo"));
            temp.setKmSaida(rs.getDouble("km_saida"));
            temp.setPrevDias(rs.getByte("prev_dias"));
            
         }
         return temp;  
      } catch (SQLException e) {  
         imprimeErro("Erro ao buscar o veiculo.", e.getMessage());  
         return null;  
      }  
  
   }
   
   
   

   /**
    * Método que busca no banco de dados os que as locação tiverem locacao fim igual
    * a 1, que é os disponiveis.
    * @return vetor de locacoes disponiveis para mostrar na tabela
    */

   public Vector<Locacao> buscarLocacoesDisponiveis() {  
      conectar();  
      Vector<Locacao> locacoesDisponiveis = new Vector<Locacao>();  
      ResultSet rs;  
      try {  
         rs = comando.executeQuery("SELECT * FROM tb_locacao WHERE locacao_fim LIKE '"+ 0 + "%';"); 
         while (rs.next()) {  
            Locacao temp = new Locacao();  
            // pega todos os atributos de pessoa  
            temp.setIdLocacao(Integer.parseInt(rs.getString("cod_locacao")));    
            temp.setCodCliente(rs.getInt("cod_cliente"));
            temp.setCodVeiculo(rs.getInt("cod_veiculo"));
            temp.setDataSaida(rs.getString("data_saida"));
            temp.setKmSaida(rs.getInt("km_saida"));
            locacoesDisponiveis.add(temp);  
         }  
         return locacoesDisponiveis;  
      } catch (SQLException e) {  
         imprimeErro("Erro ao buscar locacao", e.getMessage());  
         return null;  
      }  
  
   }
   
   /**
    * insere no banco de dados uma locação
    * @param locacao locação a ser adicionada
    */
   public void insere(Locacao locacao){  
      conectar();  
      try {
         comando.executeUpdate("INSERT INTO `bd_locarrao`.`tb_locacao` (`km_saida`,`km_entrada`,`valor`,`data_saida`,`data_devolucao`,`prev_dias`,`receita_dia`,`locacao_fim`,`cod_veiculo`,`tipo_locacao`,`cod_cliente`,`cod_motorista`) "
                 + "VALUES ('" + locacao.getKmSaida() + "','" + locacao.getKmEntrada() + "','" + locacao.getValor() + "','" + locacao.getDataSaida() + "','" + locacao.getDataDevolucao() + "','" + locacao.getPrevDias() + "','" 
                 + locacao.getReceitaDia() + "','0','" + locacao.getCodVeiculo() + "','" + locacao.getTipolocacao() + "','" + locacao.getCodCliente() + "','" + locacao.getCodMotorista() + "')");
         System.out.println("Inserida!");
      } catch (SQLException e) {  
         imprimeErro("Erro ao inserir ", e.getMessage());  
      } finally {  
         fechar();
      }  
   } 
   /**
    * conectar banco de dados
    */
   private void conectar() {  
      try {  
         con = ConFactory.conexao(URL, NOME, SENHA, ConFactory.MYSQL);  
         comando = con.createStatement();  
         System.out.println("Conectado!");  
      } catch (ClassNotFoundException e) {  
         imprimeErro("Erro ao carregar o driver", e.getMessage());  
      } catch (SQLException e) {  
         imprimeErro("Erro ao conectar", e.getMessage());  
      }  
   }
   
  /**
    * fechar banco de dados
    */
   private void fechar() {  
      try {  
         comando.close();  
         con.close();  
         System.out.println("Conexão Fechada");  
      } catch (SQLException e) {  
         imprimeErro("Erro ao fechar conexão", e.getMessage());  
      }  
   }  
  
   private void imprimeErro(String msg, String msgErro) {  
      JOptionPane.showMessageDialog(null, msg, "Erro crítico", 0);  
      System.err.println(msg);  
      System.out.println(msgErro);  
      System.exit(0);  
   }  
}  
